#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Windows日志调试脚本
用于诊断日志文件为空的问题
"""

import os
import sys
import logging
from datetime import datetime

def test_basic_logging():
    """测试基础日志功能"""
    print("=== 测试基础日志功能 ===")
    
    # 创建log目录
    log_dir = 'log'
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)
        print(f"创建日志目录: {log_dir}")
    
    # 测试文件写入权限
    test_file = os.path.join(log_dir, "permission_test.log")
    try:
        with open(test_file, 'w', encoding='utf-8') as f:
            f.write("权限测试成功\n")
        print(f"✓ 文件写入权限正常: {test_file}")
    except Exception as e:
        print(f"✗ 文件写入权限失败: {e}")
        return False
    
    # 测试日志配置
    logger = logging.getLogger('test')
    logger.setLevel(logging.INFO)
    
    # 清除现有处理器
    for handler in logger.handlers[:]:
        logger.removeHandler(handler)
    
    # 创建文件处理器
    file_handler = logging.FileHandler(test_file, encoding='utf-8', mode='a')
    file_handler.setLevel(logging.INFO)
    
    # 创建格式化器
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    file_handler.setFormatter(formatter)
    
    # 添加处理器
    logger.addHandler(file_handler)
    
    # 测试日志输出
    logger.info("测试INFO日志")
    logger.warning("测试WARNING日志")
    logger.error("测试ERROR日志")
    
    # 强制刷新
    file_handler.flush()
    file_handler.close()
    
    # 检查文件内容
    try:
        with open(test_file, 'r', encoding='utf-8') as f:
            content = f.read()
            if content.strip():
                print(f"✓ 日志文件内容正常:\n{content}")
                return True
            else:
                print("✗ 日志文件为空")
                return False
    except Exception as e:
        print(f"✗ 读取日志文件失败: {e}")
        return False

def test_hourly_rotation():
    """测试小时轮转日志功能"""
    print("\n=== 测试小时轮转日志功能 ===")
    
    log_dir = 'log'
    
    class SimpleHourlyHandler(logging.FileHandler):
        def __init__(self, log_dir):
            self.log_dir = log_dir
            self.current_hour = None
            super().__init__(self._get_filename(), encoding='utf-8', mode='a')
        
        def _get_filename(self):
            now = datetime.now()
            hour = now.strftime('%Y%m%d-%H')
            return os.path.join(self.log_dir, f"{hour}:00.log")
        
        def emit(self, record):
            try:
                now = datetime.now()
                current_hour = now.strftime('%Y%m%d-%H')
                
                if self.current_hour != current_hour:
                    self.current_hour = current_hour
                    self.close()
                    self.baseFilename = self._get_filename()
                    self.stream = self._open()
                
                super().emit(record)
                if self.stream:
                    self.stream.flush()
            except Exception as e:
                print(f"日志写入异常: {e}")
    
    # 创建测试日志器
    logger = logging.getLogger('hourly_test')
    logger.setLevel(logging.INFO)
    
    # 清除现有处理器
    for handler in logger.handlers[:]:
        logger.removeHandler(handler)
    
    # 创建小时轮转处理器
    handler = SimpleHourlyHandler(log_dir)
    handler.setLevel(logging.INFO)
    
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    
    logger.addHandler(handler)
    
    # 测试日志输出
    logger.info("小时轮转测试 - INFO")
    logger.warning("小时轮转测试 - WARNING")
    logger.error("小时轮转测试 - ERROR")
    
    # 检查文件
    filename = handler._get_filename()
    try:
        with open(filename, 'r', encoding='utf-8') as f:
            content = f.read()
            if content.strip():
                print(f"✓ 小时轮转日志正常: {filename}")
                print(f"内容:\n{content}")
                return True
            else:
                print(f"✗ 小时轮转日志文件为空: {filename}")
                return False
    except Exception as e:
        print(f"✗ 读取小时轮转日志失败: {e}")
        return False

def check_system_info():
    """检查系统信息"""
    print("=== 系统信息 ===")
    print(f"操作系统: {sys.platform}")
    print(f"Python版本: {sys.version}")
    print(f"当前工作目录: {os.getcwd()}")
    print(f"Python路径: {sys.executable}")
    
    # 检查编码
    print(f"默认编码: {sys.getdefaultencoding()}")
    print(f"文件系统编码: {sys.getfilesystemencoding()}")

if __name__ == "__main__":
    check_system_info()
    
    basic_ok = test_basic_logging()
    rotation_ok = test_hourly_rotation()
    
    print(f"\n=== 测试结果 ===")
    print(f"基础日志: {'✓ 正常' if basic_ok else '✗ 异常'}")
    print(f"小时轮转: {'✓ 正常' if rotation_ok else '✗ 异常'}")
    
    if basic_ok and rotation_ok:
        print("✓ 所有日志功能正常")
    else:
        print("✗ 日志功能存在问题，请检查上述错误信息")
